package com.wuxinwudai.android.widget;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.wuxinwudai.android.database.MarkDataBean;

import java.util.ArrayList;
import java.util.Collection;

/**
 * ExRecyclerViewAdapter 类为 RecyclerView.Adapter 类扩展类
 * @author 吾心无待 于 2016-7-26
 * @param <T> 数据类型
 * @param <VH> ViewHolder 类型
 *
 */
public abstract class ExRecyclerViewAdapter<T extends MarkDataBean,VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
    protected ArrayList<T> mList;//数据列表
    protected Context mContext;//上下文对象
    protected LayoutInflater mLayoutInflater;// LayoutInflater

    /**
     * 构造函数，供子类调用
     * @param context 上下文对象
     * @param list 数据列表
     */
    public ExRecyclerViewAdapter(Context context, ArrayList<T> list){
        super();
        this.mList = list == null ? new ArrayList<T>() : list;
        this.mContext = context;
        mLayoutInflater = LayoutInflater.from(context);
    }
    /**
     * 构造函数，供子类调用
     * @param context 上下文对象
     */
    public ExRecyclerViewAdapter(Context context){
        super();
        this.mList = new ArrayList<>();
        this.mContext = context;
        mLayoutInflater = LayoutInflater.from(context);
    }

    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        View convertView = mLayoutInflater.inflate(getRecyclerViewItemLayoutResID(),parent,false);
        return getViewHolder(convertView);
    }

    @Override
    public void onBindViewHolder(VH holder, int position) {
        T t = mList.get(position);
        initViewHolder(holder,t);
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    /**
     * 使用获得的数据项初始化 ViewHolder 的子视图
     * @param vh VIewHolder 对象
     * @param t 数据项
     */
    public abstract void initViewHolder(VH vh,T t);

    /**
     * 获取列表项布局资源 id
     * @return 列表项布局资源 id
     */
    public abstract int getRecyclerViewItemLayoutResID();
    /**
     * 获取 ViewHolder
     * @param convertView 列表项视图
     * @return ViewHolder 对象
     */
    public abstract VH getViewHolder(View convertView);

    /**
     * 添加一条数据记录
     * @param t 数据
     */
    public void add(T t){
        this.mList.add(t);
    }

    /**
     * 添加多条数据记录
     * @param list 数据记录列表
     */
    public void addAll(Collection<T> list){
        this.mList.addAll(list);
    }

    /**
     * 移除指定索引数据
     * @param index 数据项索引
     */
    public void remove(int index){
        this.mList.remove(mList.remove(index));
    }

    /**
     * 移除指定数据项
     * @param t 移除指定数据项
     */
    public void remove(T t){ this.mList.remove(t);}

    /**
     * 更新指定索引项
     * @param index 索引位置
     * @param t 新数据项
     */
    public void update(int index,T t){
        this.mList.set(index,t);
    }

    /**
     * 获取数据列表
     * @return 数据列表
     */
    public ArrayList<T> getList(){ return mList; }
}
